package Day_0219.Exception;

/**
 * @author zxc
 * @date 2023/02/19 08:58
 **/
public class Error_Exception {
    public static void main(String[] args) {
        /**
         * 谈一谈对于Error和Exception的理解
         * ===》
         * 1.error表示系统级的错误，是java运行环境内部错误或者硬件问题，
         * 不能指望程序来处理这样的问题，除了退出运行外别无选择，它是Java虚拟机抛出的。
         *
         * 2.exception 表示程序需要捕捉、需要处理的异常，
         * 是由与程序设计的不完善而出现的问题，程序必须处理的问题。
         *
         * ===》
         * error是错误，系统本身/编译环境所出现的错误;exception是异常，代码编写错误/程序设计不完整所带来的问题;
         *
         * 3.运行时异常和一般异常有何不同
         * ===》Java提供了两类主要的异常：runtimeException和checkedException
         * 1）一般异常（checkedException）：
         * 主要是指IO异常、SQL异常等。
         * 对于这种异常，JVM要求我们必须对其进行catch处理，
         * 所以，面对这种异常，不管我们是否愿意，都是要写一大堆的catch块去处理可能出现的异常。
         *
         * 2）运行时异常（runtimeException）：
         * 一般不处理，当出现这类异常的时候程序会由虚拟机接管。
         * 比如，我们从来没有去处理过NullPointerException，而且这个异常还是最常见的异常之一。
         * （1）出现运行时异常的时候，程序会将异常一直向上抛，一直抛到遇到处理代码，
         *  如果没有catch块进行处理，到了最上层，如果是多线程就有Thread.run()抛出，如果不是多线程那么就由main.run()抛出。
         *  抛出之后，如果是线程，那么该线程也就终止了，如果是主程序，那么该程序也就终止了。
         * （2）运行时异常的也是继承自Exception，也可以用catch块对其处理，只是我们一般不处理罢了，
         *  也就是说，如果不对运行时异常进行catch处理，那么结果是 线程退出/主程序终止。
         * （3）如果不想终止，那么我们就必须捕获所有可能出现的运行时异常。
         *  如果程序中出现了异常数据，但是它不影响下面的程序执行，那么我们就该在catch块里面将异常数据舍弃，然后记录日志。
         *  如果，它影响到了下面的程序运行，那么还是程序退出比较好些。
         *
         */
    }
}
